【GAMES 101】作业1的实现和思考

您所在的位置:网站首页 games 101作业三踩坑 【GAMES 101】作业1的实现和思考

【GAMES 101】作业1的实现和思考

2024-01-01 06:44| 来源: 网络整理| 查看: 265

文章目录 作业要求代码实现绘制结果简单的思考

本文为闫令琪老师的GAMES 101课程的作业1的个人实现与一些简单的思考,文中如有错漏欢迎指出。

作业要求

本次作业的任务是填写一个旋转矩阵和一个透视投影矩阵。给定三维下三个点v0(2.0, 0.0, −2.0), v1(0.0, 2.0, −2.0), v2(−2.0, 0.0, −2.0), 你需要将这三个点的坐标变换为屏幕坐标并在屏幕上绘制出对应的线框三角形。

代码实现

这里需要实现的是get_model_matrix和get_projection_matrix这两个方法,分别对应着模型和投影变换。

在模型变换中,要实现绕z轴旋转rotation_angle角度的变换矩阵,即为如下所示的矩阵:

R z ( α ) = [ c o s α − s i n α 0 0 s i n α c o s α 0 0 0 0 1 0 0 0 0 1 ] R_{z}(\alpha)=\left[ \begin{matrix} cos\alpha & -sin\alpha & 0 & 0 \\ sin\alpha & cos\alpha & 0 &0 \\0 & 0 & 1& 0 \\0 & 0 & 0 & 1 \end{matrix} \right] Rz​(α)=⎣⎢⎢⎡​cosαsinα00​−sinαcosα00​0010​0001​⎦⎥⎥⎤​

投影变换参考闫老师课上讲解的方法实现:

正交投影变换是先将长方体平移到中心在原点的位置,再缩放成边长为2的正方体

M o r t h o = M s c a l e ⋅ M t r a n s f o r m M_{ortho}=M_{scale}\cdot M_{transform} Mortho​=Mscale​⋅Mtransform​

透视投影变换是先将平截头体变形成长方体,再进行正交投影变换

M p e r s p = M o r t h o ⋅ M p e r s p 2 o r t h o M_{persp}=M_{ortho}\cdot M_{persp2ortho} Mpersp​=Mortho​⋅Mpersp2ortho​

将平截头体变形成长方体,满足的两个规则是:

Rule1:近平面的点不变

Rule2:远平面的点z值不变

根据这两个规则和相似三角形,可以推出平截头体变形成长方体的变换矩阵:

M p e r s p 2 o r t h o = [ n 0 0 0 0 n 0 0 0 0 n + f − n f 0 0 1 0 ] M_{persp2ortho}=\left[ \begin{matrix} n & 0 & 0 & 0 \\ 0 & n & 0 &0 \\0 & 0 & n+f & -nf \\0 & 0 & 1 & 0 \end{matrix} \right] Mpersp2ortho​=⎣⎢⎢⎡​n000​0n00​00n+f1​00−nf0​⎦⎥⎥⎤​

由此我们得到了最终的投影变换矩阵。

投影变换的详细图示与推导可以阅读这位同学的博文:参考文章

Eigen::Matrix4f get_model_matrix(float rotation_angle) { Eigen::Matrix4f model = Eigen::Matrix4f::Identity(); // TODO: Implement this function // Create the model matrix for rotating the triangle around the Z axis. // Then return it. double radian = MY_PI * rotation_angle / 180; Eigen::Matrix4f translate; translate


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3